package main

import "fmt"

// 结构体是值类型
type person struct {
	name, age string
}

func f(x person) {
	x.name = "jerry"
	fmt.Printf("f   x: %v\n", x)
}
func f2(x *person) {
	// (*x).name = "jerry"
	// 语法糖
	x.name = "jerry"
	fmt.Printf("f2  x: %v\n", x)
}
func main() {
	var p = person{name: "tom", age: "22"}
	// 值拷贝
	f(p)
	fmt.Printf("p: %v\n", p)

	// 引用传递
	f2(&p)
	fmt.Printf("p: %v\n", p)

	// go支持 new() 创建结构体实例,new() 返回的是结构体的地址,且支持直接对结构体指针使用.的方式访问成员
	var p2 = new(person)
	fmt.Printf("type: %T\n", p2)
	p2.name = "王五"
	fmt.Printf("p2: %v\n", p2)
}
